/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb.negocio;

import ejb.dao.ConsumoDAOLocal;
import ejb.dao.TarjetaDAOLocal;
import ejb.dao.TransporteDAOLocal;
import entidades.Consumo;
import entidades.Tarjeta;
import entidades.Transporte;
import ejb.excepciones.NonexistentEntityException;
import ejb.excepciones.SaldoInsuficienteException;
import java.math.BigDecimal;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author pauloe
 */
@Stateless
public class GestorTransporteService implements GestorTransporteServiceLocal {

    @EJB
    ConsumoDAOLocal consumoDAO;
    @EJB
    TarjetaDAOLocal tarjetaDAO;
    @EJB
    TransporteDAOLocal transporteDAO;

    @Override
    public Boolean usarTarjeta(int idTarjeta, String patente, BigDecimal monto) throws NonexistentEntityException, SaldoInsuficienteException {
        boolean aprobado = false;
        Transporte transporte = transporteDAO.buscarPorId(patente);
        if (transporte != null) /*fijarse si el transporte existe*/ {
            Tarjeta tarjeta = tarjetaDAO.buscarPorId(idTarjeta);
            //Validar consumo
            if (tarjeta != null) /*fijarse si la tarjeta existe*/ {
                if (tarjeta.getSaldo().compareTo(monto) >= 0) /*fijarse si la tarjeta tiene saldo suficiente*/ {
                    //Crear y agregar consumo
                    Consumo consumo = new Consumo();
                    consumo.setFechaHora(new Date());
                    consumo.setIdTarjeta(tarjeta);
                    consumo.setPatente(transporte);
                    try {
                        consumoDAO.crear(consumo);
                        aprobado = true;
                    } catch (Exception ex) {
                        Logger.getLogger(GestorTransporteService.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }else {
                    throw new SaldoInsuficienteException("La tarjeta con id " + idTarjeta + " no tiene saldo suficiente.");
                }
            } else {
                throw new NonexistentEntityException("La tarjeta con id " + idTarjeta + " no existe.");
            }
        } else {
            throw new NonexistentEntityException("El transporte con patente " + patente + " no existe.");
        }
        return aprobado;
    }
    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")
}
